<?php
// +----------------------------------------------------------------------
// | UCToo [ Universal Convergence Technology ]
// +----------------------------------------------------------------------
// | Copyright (c) 2014-2020 http://uctoo.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: Patrick <contact@uctoo.com>
// +----------------------------------------------------------------------

namespace app\wechatopen\controller;

use Illuminate\Container\Container;
use think\Controller;
use uctoo\ThinkEasyWeChat\Facade;
use think\Hook;
use think\Log;
use app\admin\model\wechatopen\Applet;

/**
 * 非第三方平台开发模式微信公众号的交互控制器，中控服务器
 * 主要获取和反馈微信平台的数据，分析用户交互和系统消息分发。
 */
class Official extends Controller {

    //行为绑定，需要将标签位的处理逻辑分发到各个行为类的都要在这里绑定行为
    public function _initialize()
    {
        Hook::add('user_enter_tempsession','app\\wechatopen\\behavior\\UserEnterTempsession');
        Hook::add('text_auto_reply','app\\wechatopen\\behavior\\CustomSendAutoReply');
        Hook::add('subscribemsg','app\\wechatopen\\behavior\\CustomSendAutoReply');
    }

     /**
     * 开启了开发模式的公众号所有发送到微信公众号的消息都会推送到该操作
     * 所以，微信公众平台后台填写的api地址则为该操作的访问地址
     * 在mp.weixin.qq.com  公众号登录 开发->基本配置-> 服务器地址(URL)填写  https://域名/wechatopen/official/index/appid/$APPID$          URL中的$APPID$ 填写帐号具体的appid值
     * @return mixed
     */
	public function index() {
        $appid = input('appid');

        Log::write($appid,'$appid',true);
        $cont = Container::getInstance();
        Log::write($cont,'$cont',true);
        if(is_null($appid)){
            abort(404);
        }
        $applet = Applet::get(['appid'=>$appid]);
        if(!isset($applet)){  //未在此平台管理的应用
            abort(404);
        }
        session('applet_info',$applet);       //将当前会话的应用信息加入session
        $appletConfig = Applet::getAppletConfig($appid);
        Log::write($appletConfig,'$appletConfig',true);

        $officialAccount = Facade::officialAccount($appid,$appletConfig);  // 公众号
        Log::write($officialAccount,'officialAccount',true);
        $officialAccount->server->push(function($message){
            return 'hello,world';
        });
        $officialAccount->server->serve()->send();
      /* //一段最简单的示例
        $app = Container::getInstance()->make('wechat.official_account');
        $app->server->push(function($message){
            return 'hello,world';
        });
        $app->server->serve()->send();
      */
    }
}